package com.moter.demo01.juc.unsafecollections;

import java.util.*;
import java.util.concurrent.ConcurrentHashMap;

public class UnSafeMap {
    public static void main(String[] args){
//        unsafe
//        HashMap在多线程修改数据下，会抛出ConcurrentModificationException，并发修改异常
//        Map<String,String> map=new HashMap<>();

//        safe
//        Hashtable，它的操作数据的方法都是用 synchronized 修饰的，所以线程安全
//        Map<String,String> map=new Hashtable<>();

//        用集合工具类来转换synchronizedMap
//        Map<String, String> map= Collections.synchronizedMap(new HashMap<>());

//        juc包提供了ConcurrentHashMap，支持并发操作，内部的一个属性，segment继承了lock锁，在每个桶被访问的时候都锁一次，这样可以支持并发
        Map<String, String> map= new ConcurrentHashMap<>();
        for (int i = 0; i < 20; i++) {
            new Thread(()->{
                map.put(UUID.randomUUID().toString().substring(0,5),UUID.randomUUID().toString().substring(0,5));
                System.out.println(map);
            }).start();
        }
    }

}
